1
Transaksi Adalah Satu Unit Kerja
DSAI2202Transactions in SQL Databases
00:00

Perubahan data jarang datang sendirian: transfer harus mendebit satu akun dan mengkredit akun lain, dan pesanan harus memesan stok serta mencatat pembayaran. Jika sistem berhenti di tengah jalan, basis data akan menggambarkan dunia yang tidak pernah ada. Sebuah transaksi adalah jawaban basis data atas masalah itu — rangkaian satu atau lebih operasi yang diperlakukan oleh basis data sebagai satu unit kerja tunggal yang tak terpisahkan.

Semuanya, atau tidak sama sekali

Di dalam transaksi, setiap operasi menjadi bagian dari satu hasil akhir. Basis data tidak pernah menampilkan keadaan akhir di mana hanya sebagian transaksi yang terjadi. Ilustrasi klasiknya adalah transfer antara dua rekening bank: kurangi saldo rekening sumber, lalu tambah saldo rekening tujuan. Jika hanya langkah pertama yang berhasil, uang akan hilang; jika hanya langkah kedua, uang akan muncul entah dari mana. Membungkus kedua langkah dalam satu transaksi menghilangkan kedua kemungkinan tersebut.

Jaminan semua-atau-tidak-sama-sekali ini disebut atomisitas. Commit adalah tindakan yang membuat perubahan transaksi menjadi permanen; transaksi yang tidak pernah di-commit tidak meninggalkan jejak sama sekali. Durabilitas menambahkan bagian terakhir: setelah commit berhasil dikembalikan, perubahan tetap bertahan bahkan jika mesin kehilangan daya sesaat setelahnya.

Transaksi adalah satu unit kerjaTransaksi Adalah Satu Unit KerjaAtomisitas: semuanya, atau tidak sama sekali.Batas transaksisatu unit kerjaLangkah 1 — Debit rekening sumberLangkah 2 — Kredit rekening tujuanKeadaan antara ada di dalam batas ini,tetapi bersifat privat bagi transaksi ini.✓COMMITKedua perubahan permanenTetap bertahan setelah crash pasca-commit↺ROLLBACKKedua rekening tidak berubahTidak meninggalkan jejak sama sekaliTransaksi adalah rangkaian satu atau lebih operasi yang diperlakukan sebagai satu unit kerja tunggal yang tak terpisahkan.

Transaksi adalah sebuah batas

Akan membantu jika membayangkan transaksi sebagai batas yang ditarik di sekitar sekelompok pernyataan. Sebelum dan sesudah batas tersebut, data mematuhi aturan yang ditetapkan oleh struktur. Di dalam batas itu, keadaan antara memang ada — satu rekening sudah didebit sementara rekening lainnya belum dikredit — tetapi keadaan tersebut bersifat privat bagi transaksi tersebut. Pernyataan berikutnya di sesi lain tidak menganggapnya sebagai kebenaran.

Dua tugas sekaligus

Oleh karena itu, transaksi menjalankan dua tugas. Yang pertama adalah penanganan kegagalan: jika proses crash, koneksi terputus, atau pernyataan memunculkan galat, basis data dapat memulihkan keadaan yang ada sebelum transaksi dimulai. Yang kedua adalah kontrol visibilitas: selama pekerjaan berlangsung, pembaca lain terlindung dari hasil yang belum selesai. Kedua tugas ini saling berkaitan tetapi tidak identik — atomisitas menentukan apakah perubahan disimpan, sedangkan visibilitas diatur oleh isolasi, yaitu pengaturan yang mengontrol seberapa besar transaksi yang berjalan bersamaan dapat saling melihat satu sama lain.

Jaga unit tetap pada satu koneksi
Status transaksi dimiliki oleh sebuah koneksi atau sesi, sehingga pernyataan yang membuka transaksi dan commit yang mengakhirinya harus dijalankan pada koneksi yang sama. Banyak driver juga berjalan dalam mode autocommit , di mana setiap pernyataan tunggal merupakan transaksinya sendiri — unit multi-pernyataan memerlukan autocommit dimatikan atau dimulai secara eksplisit.